<?php

require_once '../dlo/GrupoDLO.php';

class PermissaoController {

    private $cod_permissao;
    private $consulta;
    private $inclusao;
    private $alteracao;
    private $exclusao;
    private $cod_grupo;
    private $cod_recurso;
    private $row_id;
    private $campo_id;
    private $campo_valor;
    private $recurso;
    private $tipo_listagem;

    function __construct(&$cod_permissao, &$consulta, &$inclusao, &$alteracao, &$exclusao, &$cod_grupo, &$cod_recurso, &$row_id, &$campo_id, &$campo_valor, &$recurso, &$tipo_listagem) {
        $this->cod_permissao = &$cod_permissao;
        if ($consulta == 'true') {
            $this->consulta = 'S';
        } else {
            $this->consulta = 'N';
        }
        if ($inclusao == 'true') {
            $this->inclusao = 'S';
        } else {
            $this->inclusao = 'N';
        }
        if ($alteracao == 'true') {
            $this->alteracao = 'S';
        } else {
            $this->alteracao = 'N';
        }
        if ($exclusao == 'true') {
            $this->exclusao = 'S';
        } else {
            $this->exclusao = 'N';
        }
        $this->cod_grupo = &$cod_grupo;
        $this->cod_recurso = &$cod_recurso;
        $this->row_id = &$row_id;
        $this->campo_id = &$campo_id;
        $this->campo_valor = &$campo_valor;
        $this->recurso = &$recurso;
        $this->tipo_listagem = &$tipo_listagem;
    }

    public function cadastrar() {
        try {
            $dlo = &GrupoDLO::getInstance();
            $dlo->cadastrarPermissao($this->cod_grupo, $this->consulta, $this->inclusao, $this->alteracao, $this->exclusao, $this->cod_recurso);
        } catch (Exception $e) {
            echo "Exception: " . $e->getMessage();
        }
    }

    public function alterar() {
        try {
            $dlo = &GrupoDLO::getInstance();
            $dlo->alterarPermissao($this->cod_grupo, $this->row_id, $this->campo_id, $this->campo_valor);
            echo $this->campo_valor;
        } catch (Exception $e) {
            if ($e->getMessage() != 'no_action') {
                echo "Exception: " . $e->getMessage();
            } else {
                echo $this->campo_valor;
            }
        }
    }

    public function excluir() {
        try {
            $dlo = &GrupoDLO::getInstance();
            $dlo->excluirPermissao($this->cod_grupo, $this->cod_permissao);
        } catch (Exception $e) {
            echo "Exception: " . $e->getMessage();
        }
    }

    public function consultar() {
        try {
            $dlo = &GrupoDLO::getInstance();
            //throw new Exception($this->cod_grupo." - ".$this->recurso);
            $row = &$dlo->consultarPermissao($this->cod_grupo, $this->recurso);
            $xml = new XMLWriter();
            $xml->openMemory();
            $xml->startDocument('1.0', 'UTF-8');
            $xml->startElement("permissao");
            $xml->writeElement("cod_permissao", $row['cod_permissao']);
            $xml->writeElement("consulta", $row['consulta']);
            $xml->writeElement("inclusao", $row['inclusao']);
            $xml->writeElement("alteracao", $row['alteracao']);
            $xml->writeElement("exclusao", $row['exclusao']);
            $xml->endElement();
            header('Content-type: text/xml');
            print $xml->outputMemory(true);
        } catch (Exception $e) {
            echo "Exception: " . $e->getMessage();
        }
    }

    public function listar() {
        try {
            $dlo = &GrupoDLO::getInstance();
            $lista = &$dlo->listarPermissoes($this->cod_grupo);
            if ($this->tipo_listagem == 'tabela') {
                foreach ($lista as $row) {
                    echo '<tr id="' . $row["cod_permissao"] . '"><td id="cod_recurso" title="Clique duas vezes para editar">' . $row["recurso"]["descricao"] . '</td>';
                    echo '<td class="cell_editable" id="consulta" title="Clique duas vezes para editar">' . $row["consulta"] . '</td>';
                    echo '<td class="cell_editable" id="inclusao" title="Clique duas vezes para editar">' . $row["inclusao"] . '</td>';
                    echo '<td class="cell_editable" id="alteracao" title="Clique duas vezes para editar">' . $row["alteracao"] . '</td>';
                    echo '<td class="cell_editable" id="exclusao" title="Clique duas vezes para editar">' . $row["exclusao"] . '</td>';
                    echo '<td width="10px" id="' . $row["cod_permissao"] . 'bt_excluir"><div class="ui-state-default ui-corner-all"  style="float: left">';
                    echo '<a href="javascript: void(0)">';
                    echo '<span id="trash" class="ui-icon ui-icon-trash" onclick="showConfirm(\'Confirma exclusão?\',function() {manutencaoPermissao(\'excluir\',' . $row["cod_permissao"] . ');$(this).dialog(\'close\');})" title="Excluir"></span>';
                    echo '</a></div></td></tr>';
                }
            } elseif ($this->tipo_listagem == 'xml') {
                $xml = new XMLWriter();
                $xml->openMemory();
                $xml->startDocument('1.0', 'UTF-8');
                $xml->startElement("lista");
                foreach ($lista as $permissao) {
                    $xml->startElement("permissao");
                    $xml->writeElement("cod_permissao", $permissao['cod_permissao']);
                    $xml->writeElement("consulta", $permissao['consulta']);
                    $xml->writeElement("inclusao", $permissao['inclusao']);
                    $xml->writeElement("alteracao", $permissao['alteracao']);
                    $xml->writeElement("exclusao", $permissao['exclusao']);
                    $xml->writeElement("recurso", $permissao['recurso']['descricao']);
                    $xml->endElement();
                }
                $xml->endElement();
                header('Content-type: text/xml');
                print $xml->outputMemory(true);
            } elseif ($this->tipo_listagem == 'json') {
                echo json_encode($lista);
            }
        } catch (Exception $e) {
            echo "Exception: " . $e->getMessage();
        }
    }

}

$controller = new PermissaoController($_POST['cod_permissao'], $_POST['consulta'], $_POST['inclusao'], $_POST['alteracao'], $_POST['exclusao'], $_POST['cod_grupo'], $_POST['cod_recurso'], $_POST['row_id'], $_POST['campo_id'], $_POST['campo_valor'], $_POST['recurso'], $_POST['tipo_listagem']);
if ($_POST['acao'] == 'cadastrar') {
    $controller->cadastrar();
} elseif ($_POST['acao'] == 'alterar') {
    $controller->alterar();
} elseif ($_POST['acao'] == 'excluir') {
    $controller->excluir();
} elseif ($_POST['acao'] == 'listar') {
    $controller->listar();
} elseif ($_POST['acao'] == 'consultar') {
    $controller->consultar();
}
?>